all files / src/dom/ recycler.js

96.15% Statements 25/26
88.89% Branches 8/9
100% Functions 4/4
100% Lines 22/22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53    10× 10× 10×   10×   10×   10×       10×   10× 33×     10× 10×   10×     93×     93× 93×     10× 10×   10×           10×              
'use strict';
 
exports.__esModule = true;
exports.collectNode = collectNode;
exports.createNode = createNode;
 
var _constants = require('../constants');
 
var _util = require('../util');
 
var _ = require('.');
 
/** DOM node pool, keyed on nodeName. */
 
var nodes = {};
 
var normalizeName = _util.memoize(function (name) {
	return name.toUpperCase();
});
 
function collectNode(node) {
	cleanNode(node);
	var name = normalizeName(node.nodeName),
	    list = nodes[name];
	if (list) list.push(node);else nodes[name] = [node];
}
 
function createNode(nodeName) {
	var name = normalizeName(nodeName),
	    list = nodes[name],
	    node = list && list.pop() || document.createElement(nodeName);
	_.ensureNodeData(node);
	return node;
}
 
function cleanNode(node) {
	_.removeNode(node);
 
	Iif (_.getNodeType(node) === 3) return;
 
	// When reclaiming externally created nodes, seed the attribute cache: (Issue #97)
	if (!node[_constants.ATTR_KEY]) {
		node[_constants.ATTR_KEY] = _.getRawNodeAttributes(node);
	}
 
	node._component = node._componentConstructor = null;
 
	// if (node.childNodes.length>0) {
	// 	console.trace(`Warning: Recycler collecting <${node.nodeName}> with ${node.childNodes.length} children.`);
	// 	for (let i=node.childNodes.length; i--; ) collectNode(node.childNodes[i]);
	// }
}